package com.dylearn.controller;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dylearn.domain.Book;
import com.dylearn.serve.IBookService;
import com.dylearn.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    IBookService bookService;

    //增 ---需要传JSON 因此是post
    @PostMapping
    public R save(@RequestBody Book book) throws Exception{
        Boolean flag = bookService.save(book);

        return new R(flag , flag ?"新增数据成功！":"新增数据失败！");
    }

    //删
    @DeleteMapping("/{id}")
    public R delete(@PathVariable Integer id) throws Exception{
        Boolean flag = bookService.removeById(id);
        return new R(flag , flag ?"删除数据成功！":"删除数据失败！");
    }

    //查 啥都不用传 ---直接get
    @GetMapping
    public R getAll() throws Exception{
        List<Book> list = bookService.list();
        return new R(true,list,list.size() > 0 ? "查询数据成功！":"查询数据失败！");
    }


    //改 ----几个功能里面，主要就是这个原生态的麻烦一点，需要自己填写条件
    @PutMapping
    public R update(@RequestBody Book book) throws Exception{
        //--------这里是update 的基本使用
        //注意这东西不能随便乱用 -----这个必须得添加条件，否则这个就是全部修改
        Book bookWere = new Book();
        bookWere.setId(book.getId());

        //注意这里需要添加条件 ----因此放到这个UpdateWrapper 中的对象，有什么值，where中就有对应的限制
        UpdateWrapper<Book> updateWrapper = new UpdateWrapper<Book>(bookWere);

        //然后这里进行正常的修改操作
        updateWrapper.set("name",book.getName());
        updateWrapper.set("type",book.getType());
        updateWrapper.set("description",book.getDescription());

        Boolean flag = bookService.update(book,updateWrapper);
        return new R(flag,flag ? "修改数据成功！":"修改数据失败！");
    }

    //id查询
    @GetMapping("/{id}")
    public R getById(@PathVariable Integer id) throws Exception{
        Book book = bookService.getById(id);
        return new R(true,book,book!=null ? "id查询数据成功！":"id查询数据失败！");
    }

    //分页查询
    @GetMapping("/{currentPage}/{pageSize}")
    public R getPage(@PathVariable int currentPage, @PathVariable int pageSize,Book book) throws Exception{
        System.out.println("book ===> "+book);
        IPage<Book> page = bookService.getPage(currentPage,pageSize,book);

        //当传过来的页面数大于当前数据的页面数，那么就用当前页面的页面数进行查询
        if(currentPage > page.getPages()){
            page =  bookService.getPage((int) page.getPages(),pageSize,book);
        }
        return new R(true, page , page.getTotal() > 0 ? "分页查询数据成功！":"分页查询数据失败！");
    }



}
